package com.yifeng.common;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serializable;


@Data
@NoArgsConstructor
@AllArgsConstructor
public class Result implements Serializable {
    


    private Integer code;      // 状态码：200 成功，400 客户端错误，500 服务端错误


    private String message;    // 提示信息


    private Object data;       // 返回数据（可为 null）


    private Long total;        // 分页总数（可选，用于前端分页）

    // ==================== 成功响应 ====================

    /*
    负责人：无

    功能：返回带数据的成功响应（code=200）

    参数：data - 业务数据对象

    返回值：包含数据和成功状态的Result对象
    */
    public static Result success(Object data) {

        return new Result(200, "操作成功", data, null);
    }

    /*
    负责人：无
    
    功能：返回带数据和总条数的成功响应（用于分页场景）
    
    参数：data - 当前页数据列表
          total - 数据总记录数
    
    返回值：包含数据、总数和成功状态的Result对象
    */
    public static Result success(Object data, long total) {

        return new Result(200, "操作成功", data, total);
    }

    /*
    负责人：无
    
    功能：返回无数据的成功响应（适用于删除、更新等无需返回数据的操作）
    
    参数：无
    
    返回值：仅包含成功状态的Result对象
    */
    public static Result success() {

        return new Result(200, "操作成功", null, null);
    }

    // ==================== 失败响应 ====================

    /*
    负责人：无
    
    功能：返回客户端错误响应（code=400）
    
    参数：message - 错误提示信息
    
    返回值：包含错误信息的Result对象
    */
    public static Result fail(String message) {

        return new Result(400, message, null, null);
    }

    /*
    负责人：无
    
    功能：返回自定义状态码的失败响应（适用于各种HTTP状态码错误场景）
    
    参数：code - HTTP状态码（如401未授权、403禁止访问、500服务器错误等）
          message - 错误提示信息
    
    返回值：包含指定状态码和错误信息的Result对象
    */
    public static Result fail(int code, String message) {
        return new Result(code, message, null, null);
    }


}